package leetcode

import (
	"sort"
	"strconv"
	"strings"
)

// largestNumber 接收一个整数数组并返回能组成的最大数的字符串表示。
// 这个函数的核心在于自定义排序规则，确保数字拼接起来的数值最大。
func largestNumber(nums []int) string {
	// 获取数组长度
	n := len(nums)
	// 创建一个字符串数组，用于存放整数数组转换后的字符串形式
	strArray := make([]string, n)
	// 将整数数组转换为字符串数组
	for i := 0; i < n; i++ {
		strArray[i] = strconv.Itoa(nums[i])
	}
	// 自定义排序规则，使得拼接后的字符串越大，排序越靠前
	sort.Slice(strArray, func(i, j int) bool {
		a := strArray[i] + strArray[j]
		b := strArray[j] + strArray[i]
		return strings.Compare(a, b) > 0
	})
	// 如果排序后的第一个元素是"0"，则直接返回"0"
	if strArray[0] == "0" {
		return "0"
	}
	// 将排序后的字符串数组拼接成最终的结果
	return strings.Join(strArray, "")
}
